/*
 * FilmeDAO.java
 *
 * Created on 16 de Junho de 2007, 18:25
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package model.persistence.dao;

import com.sun.crypto.provider.RSACipher;
import java.beans.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import model.persistence.vo.Cinema;
import model.persistence.vo.Filme;
import model.persistence.vo.Sala;
import model.persistence.vo.Sessao;

/**
 *
 * @author $Leandro$
 */
public class FilmeDAO extends ConnectionDAO{
    
    /** Creates a new instance of FilmeDAO */
    public FilmeDAO() {
        super();
    }
    
    public Collection getFilmesByRegiao(int id_regiao, String nomeFilme) {
        Collection result = null;
        
        String sql = "select distinct f.nome,f.id_filme,f.faixa_etaria,f.sinopse,"
                + "f.genero,f.nota from filme f inner join sessao s on "
                + "f.id_filme = s.id_filme "
                + "inner join cinema c on c.id_cinema = s.id_cinema "
                + "inner join bairro b on b.id_bairro = " + id_regiao + " and b.id_bairro = c.id_bairro";
        
        ResultSet rs = this.executaSelectQuery(sql);
        try {
            while(rs.next()) {
                Filme f = new Filme();
                f.setNome(rs.getString("nome"));
                f.setId_filme(rs.getInt("id_filme"));
                f.setSinopse(rs.getString("sinopse"));
                f.setRanking(rs.getInt("ranking"));
                f.setNotaCritica(rs.getInt("nota"));
                f.setFaixa_etaria(rs.getString("faixa_etaria"));
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        return result;
    }
    
    public Collection getFilmesByCinema(int idCinema) {
        Collection result = new ArrayList();
        
        String sql = "select distinct f.nome,f.id_filme,f.faixa_etaria,f.sinopse,"
                + "f.genero,f.nota from filme f inner join "
                + "sala s on s.id_filme = f.id_filme and s.id_cinema = " + idCinema;
        
        ResultSet rs = this.executaSelectQuery(sql);
        try {
            while(rs.next()) {
                Filme f = new Filme();
                f.setNome(rs.getString("nome"));
                f.setId_filme(rs.getInt("id_filme"));
                f.setSinopse(rs.getString("sinopse"));
                f.setRanking(0);
                f.setNotaCritica(rs.getInt("nota"));
                f.setFaixa_etaria(rs.getString("faixa_etaria"));
                result.add(f);
            }
            return result;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }
    
    public Collection getCinemasByFilme(int idRegiao, int idFilme) {
        Collection result = new ArrayList();
        
        String sql = "select distinct c.id_cinema, c.nome from cinema c " +
                "inner join bairro b on c.id_bairro =  " + idRegiao +
                " inner join sala s on s.id_cinema = c.id_cinema and s.id_filme = " + idFilme;
        
        ResultSet rs = this.executaSelectQuery(sql);
        try {
            while(rs.next()) {
                Cinema c = new Cinema();
                c.setId_cinema(rs.getInt("id_cinema"));
                c.setNome(rs.getString("nome"));
                result.add(c);
            }
            return result;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }
    
    public Collection getCinemasByRegiao(int idRegiao) {
        Collection result = new ArrayList();
        
        String sql = "select distinct c.id_cinema, c.nome from cinema c " +
                "inner join bairro b on c.id_bairro =  " + idRegiao + " and c.id_bairro = b.id_bairro";
        
        ResultSet rs = this.executaSelectQuery(sql);
        try {
            while(rs.next()) {
                Cinema c = new Cinema();
                c.setId_cinema(rs.getInt("id_cinema"));
                c.setNome(rs.getString("nome"));
                result.add(c);
            }
            return result;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }
    
    public Collection getTop10() {
        Collection result = new ArrayList();
        
        String sql = "select f.nome,f.id_filme,f.faixa_etaria,f.sinopse, f.ranking,f.genero,f.nota "
                + "from filme f where f.ranking != 0 order by f.ranking ";
        
        ResultSet rs = this.executaSelectQuery(sql);
        try {
            while(rs.next()) {
                Filme f = new Filme();
                f.setNome(rs.getString("nome"));
                f.setId_filme(rs.getInt("id_filme"));
                f.setSinopse(rs.getString("sinopse"));
                f.setRanking(rs.getInt("ranking"));
                f.setNotaCritica(rs.getInt("nota"));
                f.setFaixa_etaria(rs.getString("faixa_etaria"));
                
                result.add(f);
            }
            return result;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }
    
    
    public Collection getSalaByCinema(int idCinema, int idFilme) {
        Collection result = new ArrayList();
        
        String sql = "select s.id_sala,s.nome_sala,se.id_sessao,se.horario,se.valor from sala s "
                + "inner join sessao se on s.id_cinema = "
                + idCinema + " and s.id_filme = " + idFilme
                + " and se.n_sala = s.id_sala";
        
        ResultSet rs = this.executaSelectQuery(sql);
        try {
            while(rs.next()) {
                Sessao sessao = new Sessao();
                sessao.setHorario(rs.getString("horario"));
                sessao.setId_sessao(rs.getInt("id_sessao"));
                sessao.setValor(rs.getFloat("valor"));
                
                Sala sala = new Sala();
                sala.setId_sala(rs.getInt("id_sala"));
                sala.setNome_sala(rs.getString("nome_sala"));
                
                sessao.setSala(sala);
                
                result.add(sessao);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        return result;
    }
    
    public Collection getSalaByCinema(int idCinema) {
        Collection result = new ArrayList();
        
        String sql = "select s.id_sala,s.nome_sala,se.id_sessao,se.horario,se.valor from sala s"
                + "inner join sessao se on s.id_cinema = "
                + idCinema + " and se.n_sala = s.id_sala";
        
        ResultSet rs = this.executaSelectQuery(sql);
        try {
            while(rs.next()) {
                Sessao sessao = new Sessao();
                sessao.setHorario(rs.getString("horario"));
                sessao.setId_sessao(rs.getInt("id_sessao"));
                sessao.setValor(rs.getFloat("valor"));
                
                Sala sala = new Sala();
                sala.setId_sala(rs.getInt("id_sala"));
                sala.setNome_sala(rs.getString("nome_sala"));
                
                sessao.setSala(sala);
                
                result.add(sessao);
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        
        return result;
    }
    
}